\section{Estructura del programa}

Como se puede apreciar en la figura 2.1, el programa que implementa el etiquetador b\'asico est\'a dividido en doce clases. De ellas, podr\'iamos distinguir seis que constituyen la base del programa.
Primeramente se encuentra la clase Interfaz, que implementa todos los m\'etodos de inicializaci\'on, los {\em listeners} del men\'u de opciones y que hace referencia a lo que ser\'ia el fondo, es decir, la pantalla sobre la cual se colocaran los dem\'as elementos de la interfaz.Debajo de la clase Interfaz se hayan, con el mismo nivel de importancia, las clases Slider, Explorador, Helper, Etiqueta, Herramienta y Cargador. De ellos, los tres primeros representan elementos f\'isicos del programa, mientras que los tres \'ultimos representan elementos l\'ogicos del mismo.

\begin{figure}[here]
    \centering
    \includegraphics[scale=0.3]{figuras/DiagramaClasesMin.png}
 \caption{Clases necesarias para la implementaci\'on}
\end{figure}

La clase Slider, es la encargada de mostrar una barra desplazable que contiene las im\'agenes cargadas por el usuario y, mediante la cual, podemos intercambiar la imagen que est\'a siendo etiquetada por otra cualquiera que queramos etiquetar. La clase explorador representa, como su propio nombre indica, un explorador de etiquetas disponibles. En esta clase, se muestran las etiquetas por defecto o, en caso de que el usuario haya modificado las preferencias, las suyas propias. La funci\'on del explorador de etiquetas es que, presionando el {\em mouse} sobre una de las etiquetar, podamos cambiar la forma b\'asica que utilizamos para etiquetas las im\'agenes por otra distinta.

La clase Helper se encarga de mostrar, en una barra posicionada justo encima de la barra deslizante de im\'agenes, el texto de ayuda que el usuario puede necesitar. En dicho texto se incluyen instrucciones precisas sobre cada tipo de etiqueta o informaci\'on adicional de los controles de la interfaz.

\pagebreak

Las clases l\'ogicas del programa, representan aspectos que no siempre son visibles para el usuario, es decir, elementos que aparecen seg\'un las acciones del usuario. Dentro de las clases l\'ogicas, encontramos la clase Etiqueta, que contiene los m\'etodos b\'asicos que cualquier tipo de etiqueta necesita. Esta clase secundaria, representa cada una de las etiquetas que un usuario agrega al escenario y se encarga de contener toda aquella informaci\'on relevante, para posteriormente poder guardarse en un fichero. En un nivel inferior a la clase Etiqueta, encontramos cada uno de los tipos disponibles de las mismas que, sobrescriben los m\'etodos de la clase madre con tal de cambiar su comportamiento.
Seguidamente encontramos la clase Herramienta, que se encarga de almacenar todos los tipos de las mismas que tenemos, es decir, para cada tipo de etiqueta que queramos usar, se crear\'a un tipo de herramienta, para poder seleccionarla en el men\'u del Explorador de etiquetas y, as\'i poder etiquetar las im\'agenes.
Por \'ultimo pero no menos importante, encontramos la clase Cargador, que se encarga de, cargar las im\'agenes en memoria as\'i como de encontrar y leer los ficheros de etiquetas y herramientas personalizadas en caso de existir.

\pagebreak